package com.example.repository;

import com.example.entity.CreditBehavior;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

/**
 * 信贷行为Repository
 */
@Repository
public interface CreditBehaviorRepository extends JpaRepository<CreditBehavior, Long> {

    /**
     * 根据用户ID查询信贷行为
     */
    Optional<CreditBehavior> findByUserId(Long userId);

    /**
     * 根据用户ID列表查询信贷行为
     */
    List<CreditBehavior> findByUserIdIn(List<Long> userIds);

    /**
     * 查询有逾期记录的用户
     */
    List<CreditBehavior> findByHistoricalOverdueCountGreaterThan(Integer count);

    /**
     * 查询当前有逾期金额的用户
     */
    List<CreditBehavior> findByCurrentOverdueAmountGreaterThan(BigDecimal amount);

    /**
     * 查询信用卡使用率高的用户
     */
    List<CreditBehavior> findByCreditCardUtilizationRateGreaterThan(BigDecimal rate);

    /**
     * 自定义查询：根据用户ID查询最新的信贷行为
     */
    @Query("SELECT c FROM CreditBehavior c WHERE c.userId = :userId ORDER BY c.updateTime DESC")
    Optional<CreditBehavior> findLatestByUserId(@Param("userId") Long userId);

    /**
     * 自定义查询：查询高风险用户（有M2+逾期记录）
     */
    @Query("SELECT c FROM CreditBehavior c WHERE c.m2OverdueCount > 0 OR c.m3OverdueCount > 0")
    List<CreditBehavior> findHighRiskUsers();

    /**
     * 自定义查询：查询征信查询频繁的用户（近1个月查询超过5次）
     */
    @Query("SELECT c FROM CreditBehavior c WHERE c.creditInquiryLast1Month > 5")
    List<CreditBehavior> findFrequentInquiryUsers();
} 